extends Card

# 七伤拳卡牌
# 功能：造成伤害，伤害值基于本回合受到的伤害量

@export var base_damage: int = 8  # 基础伤害
@export var damage_multiplier: float = 1.5  # 伤害倍数（基于受到的伤害）

func get_default_tooltip() -> String:
	# 使用%操作符替换tooltip_text中的占位符
	return tooltip_text % [base_damage, max(1, int(base_damage * 0.3))]

func get_updated_tooltip(_player_modifiers: ModifierHandler, _enemy_modifiers: ModifierHandler) -> String:
	# 动态更新提示文本，显示当前的伤害值和最终伤害值（包含力量增益和效果翻倍）
	var current_damage = 0
	
	# 通过player_modifiers获取当前伤害值（包含力量增益和效果翻倍）
	if _player_modifiers:
		# 获取本回合受到的伤害 - 使用Card父类的静态方法获取场景树
		var tree = null
		var player = null
		
		# 尝试通过player_modifiers的父节点获取场景树
		if _player_modifiers.get_parent():
			player = _player_modifiers.get_parent()
			if player and player.get("get_tree"):
				tree = player.get_tree()
		
		# 如果无法通过player_modifiers获取，尝试使用Card的静态方法
		if not tree:
			# 这里我们无法直接获取场景树，所以使用默认值
			# 在实际游戏中，tooltip会在有场景树的情况下调用
			current_damage = 2
		else:
			# 通过场景树获取战斗信息
			var battle = tree.get_first_node_in_group("battle")
			if battle and battle.has_method("get_combat_tracker"):
				var combat_tracker = battle.get_combat_tracker()
				if combat_tracker:
					current_damage = combat_tracker.total_damage_taken
			else:
				current_damage = 2
		
		# 首先应用DMG_DEALT修改器（力量增益）
		var damage_with_power = _player_modifiers.get_modified_value(current_damage, Modifier.Type.DMG_DEALT)
		
		# 然后应用CARD_EFFECT_MULTIPLIER修改器（效果翻倍）
		var multiplier_modifier = _player_modifiers.get_modifier(Modifier.Type.CARD_EFFECT_MULTIPLIER)
		if multiplier_modifier:
			var multiplier = multiplier_modifier.get_modified_value(1)
			var final_damage = int(damage_with_power * multiplier)
			var self_damage = int(final_damage * 0.5)  # 自伤为最终伤害的一半
			print("⚔️ 七伤反噬动态tooltip: 本回合伤害 %d，力量增益后 %d，效果翻倍后 %d，自伤 %d" % [current_damage, damage_with_power, final_damage, self_damage])
			return tooltip_text % [final_damage, self_damage]
		else:
			var final_damage = damage_with_power
			var self_damage = int(final_damage * 0.5)  # 自伤为最终伤害的一半
			print("⚔️ 七伤反噬动态tooltip: 本回合伤害 %d → 最终伤害 %d，自伤 %d（无翻倍效果）" % [current_damage, final_damage, self_damage])
			return tooltip_text % [final_damage, self_damage]
	
	# 如果无法获取修改器，使用默认值
	return tooltip_text % [current_damage, int(current_damage * 0.5)]

# 运行时更新提示文本的方法（需要在卡牌UI中调用）
func get_runtime_tooltip() -> String:
	# 在Resource类中无法直接获取场景树，返回基础信息
	# 这个方法主要用于CardTooltipPopup，但那里应该调用get_default_tooltip
	var self_damage = max(1, int(base_damage * 0.3))
	return tooltip_text % [base_damage, self_damage]

func apply_effects(targets: Array[Node], modifiers: ModifierHandler) -> void:
	print("⚡ 七伤反噬卡牌被使用！")
	
	# 获取玩家的计数器
	var player = null
	var tree = null
	
	# 通过targets参数获取场景树
	if targets.size() > 0:
		tree = targets[0].get_tree()
		if tree:
			player = tree.get_first_node_in_group("player")
		else:
			print("无法获取场景树")
			return
	else:
		print("没有目标，无法执行效果")
		return
	
	var damage_taken_this_turn = 0
	
	if player and player.stats and player.stats.get_turn_counter():
		var counter = player.stats.get_turn_counter()
		damage_taken_this_turn = counter.get_counter(TurnCounter.CounterType.DAMAGE_TAKEN)
		print("📊 本回合受到伤害: %d" % damage_taken_this_turn)
	
	# 计算最终伤害
	var final_damage = base_damage + int(damage_taken_this_turn * damage_multiplier)
	print("💥 七伤反噬总伤害: %d (基础: %d + 受伤加成: %d)" % [
		final_damage, base_damage, int(damage_taken_this_turn * damage_multiplier)
	])
	
	for target in targets:
		if target is Enemy:
			print("⚡ 七伤反噬效果触发，目标: %s，伤害: %d" % [target.name, final_damage])
			
			# 造成伤害 - 使用DamageEffect确保力量增益生效
			var damage_effect := DamageEffect.new()
			damage_effect.amount = modifiers.get_modified_value(final_damage, Modifier.Type.DMG_DEALT)
			damage_effect.sound = sound
			damage_effect.execute([target])
			
			# 七伤拳的特点：对自己也造成伤害（自损特性）
			var self_damage = max(1, int(final_damage * 0.3))  # 自损30%伤害
			if player and player.stats:
				print("💔 七伤反噬自损: %d" % self_damage)
				player.stats.take_damage(self_damage)
			
			if sound:
				SFXPlayer.play(sound)
		else:
			print("❌ 目标不是Enemy类型: %s" % target.get_class()) 
